--- title: "希尔伯特曲线" created: 2025-11-28 tags: - 算法 --- # 希尔伯特曲线 ## 题目 [希尔伯特曲线](https://www.lanqiao.cn/paper/3857/problem/423/) ![[image-56e640e7.png]] ## 思路分析 四段代码分别对应4种操作 找规律即可 ## 代码实现 ```cpp #include long long f(int n, int x, int y) { if (n == 0) return 1; int m = 1 << (n - 1); if (x <= m && y <= m) { return f(n - 1, y, x);//xy调换 于y=x对称左下角 } if (x > m && y <= m) { return 3LL * m * m + f(n - 1, m-y+1 , m * 2 - x + 1); // 剩下右下角 于y=-x对称 m-y+1 m*2-x+1是因为要平移 } if (x <= m && y > m) { return 1LL * m * m + f(n - 1, x, y - m);//只移动一个 左上角 } if (x > m && y > m) { return 2LL * m * m + f(n - 1, x - m, y - m);//xy同时移动 右上角 } } int main() { int n, x, y; scanf("%d %d %d", &n, &x, &y); printf("%lld", f(n, x, y)); return 0; } ``` ## 同类题型 ## 视频讲解 --- ⬅️ [[36进制|36进制]] 🏠 [[00-冲刺国赛]] ➡️ [[发现环|发现环]]